﻿//  Copyright 2020 Google Inc. All Rights Reserved.
//
//  Licensed under the Apache License, Version 2.0 (the "License");
//  you may not use this file except in compliance with the License.
//  You may obtain a copy of the License at
//
//  http://www.apache.org/licenses/LICENSE-2.0
//
//  Unless required by applicable law or agreed to in writing, software
//  distributed under the License is distributed on an "AS IS" BASIS,
//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//  See the License for the specific language governing permissions and
//  limitations under the License.

using System.Runtime.InteropServices;

namespace NtCoreLib.IO.UsnJournal;

[StructLayout(LayoutKind.Sequential)]
internal struct USN_RECORD_COMMON_HEADER
{
    public int RecordLength;
    public ushort MajorVersion;
    public ushort MinorVersion;
}

[StructLayout(LayoutKind.Sequential)]
internal struct USN_RECORD_V2
{
    public USN_RECORD_COMMON_HEADER Header;
    public long FileReferenceNumber;
    public long ParentFileReferenceNumber;
    public ulong Usn;
    public LargeIntegerStruct TimeStamp;
    public UsnJournalReasonFlags Reason;
    public UsnJournalSourceInfoFlags SourceInfo;
    public int SecurityId;
    public FileAttributes FileAttributes;
    public ushort FileNameLength;
    public ushort FileNameOffset;
    public ushort FileName;
}

[StructLayout(LayoutKind.Sequential)]
internal struct USN_JOURNAL_DATA_V0
{
    public ulong UsnJournalID;
    public ulong FirstUsn;
    public ulong NextUsn;
    public ulong LowestValidUsn;
    public ulong MaxUsn;
    public long MaximumSize;
    public long AllocationDelta;
}

[StructLayout(LayoutKind.Sequential)]
internal struct READ_USN_JOURNAL_DATA_V0
{
    public ulong StartUsn;
    public UsnJournalReasonFlags ReasonMask;
    public int ReturnOnlyOnClose;
    public ulong Timeout;
    public ulong BytesToWaitFor;
    public ulong UsnJournalID;
}
